package com.ruoyi.system.domain;

import java.util.Date;
import java.util.List;
import java.util.Set;

import com.alibaba.excel.annotation.ExcelIgnore;
import com.alibaba.excel.annotation.ExcelProperty;
import lombok.Data;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonView;
import com.ruoyi.common.annotation.Excel;
import com.ruoyi.common.annotation.Excel.Type;
import com.ruoyi.common.core.domain.BaseEntity;

/**
 * 用户对象 sys_user
 *
 * @author ruoyi
 */
@Data
public class SysUser extends BaseEntity
{
    private static final long serialVersionUID = 1L;
    public interface getName {};

    private Integer pageNum;
    private Integer pageSize;
    private String sortField;
    private String sortOrder;

    /** 用户ID */
//    @Excel(name = "用户序号", prompt = "用户编号")
    @JsonView(value = getName.class)
    private Long              userId;

    /** 部门ID */
//    @Excel(name = "部门编号", type = Type.IMPORT)
    private Long              deptId;

    /** 多部门ID字符串 */
//    @Excel(name = "部门编号", type = Type.IMPORT)
    private String              deptIds;

    /** 部门父ID */
    private Long              parentId;

    /** 登录名称 */
//    @Excel(name = "登录名称")
    @Excel(name = "工号")
    @ExcelProperty("工号")   //加此注解表示匹配此字段
    private String            loginName;

    /** 用户名称 */
//    @Excel(name = "用户名称")
    @JsonView(value = getName.class)
    @ExcelProperty("姓名")   //加此注解表示匹配此字段
    @Excel(name = "姓名")
    private String            userName;

    /** 用户邮箱 */
//    @Excel(name = "用户邮箱")
    private String            email;

    /** 手机号码 */
//    @Excel(name = "手机号码")
    private String            phonenumber;

    /** 手机号码 */
//    @Excel(name = "座机号码")
    private String telephone;

    /** 用户性别 */
//    @Excel(name = "用户性别", readConverterExp = "0=男,1=女,2=未知")
    private String            sex;

    /** 用户头像 */
    private String            avatar;

    /** 密码 */
    private String            password;

    /** 盐加密 */
    private String            salt;

    /** 帐号状态（0正常 1停用） */
//    @Excel(name = "帐号状态", readConverterExp = "0=正常,1=停用")
    private String            status;

    /** 帐号状态（00=内部用户 01=供应商用户） */
//    @Excel(name = "帐号状态", readConverterExp = "00=内部用户,01=供应商用户")
    private String            userType;

    /** 删除标志（0代表存在 2代表删除） */
    private String            delFlag;

    /** 最后登陆IP */
//    @Excel(name = "最后登陆IP", type = Type.EXPORT)
    private String            loginIp;

    /** 最后登陆时间 */
//    @Excel(name = "最后登陆时间", width = 30, dateFormat = "yyyy-MM-dd HH:mm:ss", type = Type.EXPORT)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date              loginDate;

    /** 部门对象 */
//    @Excel(name = "部门名称", targetAttr = "deptName", type = Type.EXPORT)
    private SysDept           dept;

    /** 角色组 */
    private List<SysRole>     roles;

    private List<Long>            roleIds;

    /** 基地组 */
    private List<SysFactory>     factorys;

    private List<Long>            factoryIds;

    /** 角色继承的基地组 */
    private List<SysFactory>     roleFactorys;

    private List<Long>            roleFactoryIds;

    /** 供应商组 */
    private List<SysSupplier>     suppliers;

    private List<Long>            supplierIds;

    private Long           supplierId;

    /** 岗位组 */
    private Long[]            postIds;

    private Set<String>       buttons;

    private List<Long> lid;

    @JsonView(value = getName.class)
    private String jobnumber;

    private String goodrange;

    private String vencode;

//    public String getJobnumber() {
//        return jobnumber;
//    }
//
//    public void setJobnumber(String jobnumber) {
//        this.jobnumber = jobnumber;
//    }
//
//    public String getGoodrange() {
//        return goodrange;
//    }
//
//    public void setGoodrange(String goodrange) {
//        this.goodrange = goodrange;
//    }
//
//    public Integer getPageNum() {
//        return pageNum;
//    }
//
//    public void setPageNum(Integer pageNum) {
//        this.pageNum = pageNum;
//    }
//
//    public Integer getPageSize() {
//        return pageSize;
//    }
//
//    public void setPageSize(Integer pageSize) {
//        this.pageSize = pageSize;
//    }
//
//    public String getSortField() {
//        return sortField;
//    }
//
//    public void setSortField(String sortField) {
//        this.sortField = sortField;
//    }
//
//    public String getSortOrder() {
//        return sortOrder;
//    }
//
//    public void setSortOrder(String sortOrder) {
//        this.sortOrder = sortOrder;
//    }

    /** 备注信息  在getnamebyname里作为用户部门信息 */
    @JsonView(value = getName.class)
    private String remark;

//    public Long getUserId()
//    {
//        return userId;
//    }
//
//    public void setUserId(Long userId)
//    {
//        this.userId = userId;
//    }
//
    public boolean isAdmin()
    {
        return isAdmin(this.userId);
    }
//
    public static boolean isAdmin(Long userId)
    {
        return userId != null && 1L == userId;
    }
//
//    public Long getDeptId()
//    {
//        return deptId;
//    }
//
//    public void setDeptId(Long deptId)
//    {
//        this.deptId = deptId;
//    }
//
//    public String getDeptIds()
//    {
//        return deptIds;
//    }
//
//    public void setDeptIds(String deptIds)
//    {
//        this.deptIds = deptIds;
//    }
//
//    public Long getParentId()
//    {
//        return parentId;
//    }
//
//    public void setParentId(Long parentId)
//    {
//        this.parentId = parentId;
//    }
//
//    public String getLoginName()
//    {
//        return loginName;
//    }
//
//    public void setLoginName(String loginName)
//    {
//        this.loginName = loginName;
//    }
//
//    public String getUserName()
//    {
//        return userName;
//    }
//
//    public void setUserName(String userName)
//    {
//        this.userName = userName;
//    }
//
//    public String getEmail()
//    {
//        return email;
//    }
//
//    public void setEmail(String email)
//    {
//        this.email = email;
//    }
//
//    public String getPhonenumber()
//    {
//        return phonenumber;
//    }
//
//    public void setPhonenumber(String phonenumber)
//    {
//        this.phonenumber = phonenumber;
//    }
//
//    public String getTelephone() {
//        return telephone;
//    }
//
//    public void setTelephone(String telephone) {
//        this.telephone = telephone;
//    }
//
//    public String getSex()
//    {
//        return sex;
//    }
//
//    public void setSex(String sex)
//    {
//        this.sex = sex;
//    }
//
//    public String getAvatar()
//    {
//        return avatar;
//    }
//
//    public void setAvatar(String avatar)
//    {
//        this.avatar = avatar;
//    }
//
//    public String getPassword()
//    {
//        return password;
//    }
//
//    public void setPassword(String password)
//    {
//        this.password = password;
//    }
//
//    public String getSalt()
//    {
//        return salt;
//    }
//
//    public void setSalt(String salt)
//    {
//        this.salt = salt;
//    }
//
//    public String getStatus()
//    {
//        return status;
//    }
//
//    public void setStatus(String status)
//    {
//        this.status = status;
//    }
//
//    public String getDelFlag()
//    {
//        return delFlag;
//    }
//
//    public void setDelFlag(String delFlag)
//    {
//        this.delFlag = delFlag;
//    }
//
//    public String getLoginIp()
//    {
//        return loginIp;
//    }
//
//    public void setLoginIp(String loginIp)
//    {
//        this.loginIp = loginIp;
//    }
//
//    public Date getLoginDate()
//    {
//        return loginDate;
//    }
//
//    public void setLoginDate(Date loginDate)
//    {
//        this.loginDate = loginDate;
//    }
//
//    public SysDept getDept()
//    {
//        if (dept == null)
//        {
//            dept = new SysDept();
//        }
//        return dept;
//    }
//
//    public void setDept(SysDept dept)
//    {
//        this.dept = dept;
//    }
//
//
//    public List<SysRole> getRoles()
//    {
//        return roles;
//    }
//
//    public void setRoles(List<SysRole> roles)
//    {
//        this.roles = roles;
//    }
//
//
//    public List<Long> getRoleIds()
//    {
//        return roleIds;
//    }
//
//    public void setRoleIds(List<Long> roleIds)
//    {
//        this.roleIds = roleIds;
//    }
//
//    public Long[] getPostIds()
//    {
//        return postIds;
//    }
//
//    public void setPostIds(Long[] postIds)
//    {
//        this.postIds = postIds;
//    }
//
//    public Set<String> getButtons()
//    {
//        return buttons;
//    }
//
//    public void setButtons(Set<String> buttons)
//    {
//        this.buttons = buttons;
//    }
//
//
//    public List<SysFactory> getFactorys() {
//        return factorys;
//    }
//
//    public void setFactorys(List<SysFactory> factorys) {
//        this.factorys = factorys;
//    }
//
//    public List<Long> getFactoryIds() {
//        return factoryIds;
//    }
//
//    public void setFactoryIds(List<Long> factoryIds) {
//        this.factoryIds = factoryIds;
//    }
//
//
//
//    public List<SysSupplier> getSuppliers() {
//        return suppliers;
//    }
//
//    public void setSuppliers(List<SysSupplier> suppliers) {
//        this.suppliers = suppliers;
//    }
//
//    public List<Long> getSupplierIds() {
//        return supplierIds;
//    }
//
//    public void setSupplierIds(List<Long> supplierIds) {
//        this.supplierIds = supplierIds;
//    }
//
//    public List<SysFactory> getRoleFactorys() {
//        return roleFactorys;
//    }
//
//    public void setRoleFactorys(List<SysFactory> roleFactorys) {
//        this.roleFactorys = roleFactorys;
//    }
//
//    public List<Long> getRoleFactoryIds() {
//        return roleFactoryIds;
//    }
//
//    public void setRoleFactoryIds(List<Long> roleFactoryIds) {
//        this.roleFactoryIds = roleFactoryIds;
//    }
//
//    public String getUserType() {
//        return userType;
//    }
//
//    public void setUserType(String userType) {
//        this.userType = userType;
//    }
//
//    public String getRemark() {
//        return remark;
//    }
//
//    public void setRemark(String remark) {
//        this.remark = remark;
//    }
//
//
//
//    public Long getSupplierId() {
//        return supplierId;
//    }
//
//    public void setSupplierId(Long supplierId) {
//        this.supplierId = supplierId;
//    }
//
//
//    public List<Long> getLid() {
//        return lid;
//    }
//
//    public void setLid(List<Long>  lid) {
//        this.lid = lid;
//    }
//
//    @Override
//    public String toString()
//    {
//        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("userId", getUserId())
//                .append("deptId", getDeptId()).append("deptIds", getDeptIds()).append("loginName", getLoginName()).append("userName", getUserName())
//                .append("email", getEmail()).append("phonenumber", getPhonenumber()).append("telephone", getTelephone()).append("sex", getSex())
//                .append("avatar", getAvatar()).append("password", getPassword()).append("salt", getSalt())
//                .append("status", getStatus()).append("userType", getUserType()).append("delFlag", getDelFlag()).append("loginIp", getLoginIp())
//                .append("loginDate", getLoginDate()).append("createBy", getCreateBy())
//                .append("createTime", getCreateTime()).append("updateBy", getUpdateBy())
//                .append("updateTime", getUpdateTime()).append("remark", getRemark()).append("dept", getDept()).append("supplierId", getSupplierId())
//                .append("lid", getLid())
//                .toString();
//    }
}
